/** <b>prognoza.java</b> - Głowna klasa komponentu - SI 1.0
 * Created on 2010-03-06, 17:45:45 */
import java.beans.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/** @author MACIEJ KOPLIN - 70482 TIiM, Wydział Elektroniki i Inforamtyki, Politechnika Koszalińska
* III rok, sem VI. Rok akademicki 2009/2010.
* @version meteo 1.0*/

/** <b>meteo.java</b> - Główna klasa komponentu */
public class prognoza extends javax.swing.JPanel implements Serializable {

    /** Konstruktor bezparametrowy - wywołuje tworzenie okna komponentu oraz deserializację zmienych komponentu.*/
    public prognoza() {
        initComponents();
        java.util.Calendar cal = java.util.Calendar.getInstance();
        java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        jLabel7.setText("Data: "+String.valueOf(sdf.format(cal.getTime())));
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(40, 40, 40)));

        jLabel2.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel2.setForeground(new java.awt.Color(40, 40, 40));
        jLabel2.setText("Temperatura:");

        jLabel3.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel3.setForeground(new java.awt.Color(40, 40, 40));
        jLabel3.setText("Wilgotność:");

        jLabel4.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel4.setForeground(new java.awt.Color(40, 40, 40));
        jLabel4.setText("Ciśnienie:");

        jTextField1.setText("10");

        jTextField2.setText("10");

        jTextField3.setText("1000");

        jButton1.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jButton1.setForeground(new java.awt.Color(40, 40, 40));
        jButton1.setText("Prognozuj");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel1.setForeground(new java.awt.Color(40, 40, 40));
        jLabel1.setText("Pogoda:");

        jLabel5.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel5.setForeground(new java.awt.Color(40, 40, 40));
        jLabel5.setText("Prognoza:");

        jLabel6.setFont(new java.awt.Font("Trebuchet MS", 0, 18));
        jLabel6.setForeground(new java.awt.Color(40, 40, 40));
        jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel6.setText("Prognozowanie");

        jLabel7.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel7.setForeground(new java.awt.Color(40, 40, 40));
        jLabel7.setText("Dziś jest:");

        jLabel8.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel8.setForeground(new java.awt.Color(40, 40, 40));
        jLabel8.setText("[°C]"); // NOI18N

        jLabel9.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel9.setForeground(new java.awt.Color(40, 40, 40));
        jLabel9.setText("[%]"); // NOI18N

        jLabel10.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jLabel10.setForeground(new java.awt.Color(40, 40, 40));
        jLabel10.setText("[hPa]"); // NOI18N

        jButton2.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jButton2.setForeground(new java.awt.Color(40, 40, 40));
        jButton2.setText("Zapisz pomiar");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setFont(new java.awt.Font("Trebuchet MS", 0, 11));
        jButton3.setForeground(new java.awt.Color(40, 40, 40));
        jButton3.setText("Odczytaj pomiar");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE)
                            .addComponent(jLabel1)
                            .addComponent(jLabel5)
                            .addComponent(jLabel7)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton3))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(38, 38, 38)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel3)
                            .addComponent(jLabel2)
                            .addComponent(jLabel4))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField1)
                            .addComponent(jTextField2)
                            .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel8)
                            .addComponent(jLabel9)
                            .addComponent(jLabel10))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel6)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel8))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(jLabel9))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel10))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 7, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton2)
                    .addComponent(jButton3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel7)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    /**<b>Prognozuj</b> Obsługa zdarzenia przycisku do prognozowania, wywołuje metody sprawdzenie() i wyswietlanie();
    * @param evt - obsługa zdarzenia przycisku*/
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        sprawdzenie();
        wyswietlanie();
    }//GEN-LAST:event_jButton1ActionPerformed

    /**<b>Zapisz pomiar</b> Metoda obsługi przycisku i serializacja binarna i XML zmienne do pliku si.xml
    * @serialData - si.xml - serializuje do pliku zmienne
    * @serialData - si.bin - serializuje do pliku zmienne
    * @param evt - obsługa zdarzenia przycisku
    * @exception IOException e
    * @throws Wyjątek może spowodować błąd odczytu obiektu lub błąd tworzenia pliku*/
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
    try {
        XMLEncoder out = new XMLEncoder(new FileOutputStream("si.xml"));
        out.writeObject(temp);
        out.writeObject(wilg);
        out.writeObject(cisn);
        out.writeObject(pogoda);
        out.writeObject(prognoza);
        out.writeObject(yyy);
        out.close();
       }
   catch (IOException e) {
	e.printStackTrace();}
   try {
        BufferedWriter writer = new BufferedWriter(new FileWriter("si.bin"));
            writer.write(String.valueOf(temp));writer.newLine();
            writer.write(String.valueOf(wilg));writer.newLine();
            writer.write(String.valueOf(cisn));writer.newLine();
            writer.write(String.valueOf(pogoda));writer.newLine();
            writer.write(String.valueOf(prognoza));writer.newLine();
            writer.write(String.valueOf(yyy));
            writer.close();
       }
    catch(IOException e){}
    }//GEN-LAST:event_jButton2ActionPerformed

    /**<b>Wczytaj pomiar</b> Metoda obsługi przycisku i deserializacji XML zmienne z pliku si.xml
    * @serialData - si.xml - deserializuje z pliku zmienne
    * @param evt - obsługa zdarzenia przycisku
    * @exception IOException e
    * @throws Wyjątek może spowodować błąd odczytu obiektu lub błąd odczytu pliku*/
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
    try {
        XMLDecoder in = new XMLDecoder(new FileInputStream("si.xml"));
	temp=(Integer)in.readObject();
        wilg=(Integer)in.readObject();
        cisn=(Integer)in.readObject();
        pogoda=(String)in.readObject();
        prognoza=(String)in.readObject();
        yyy=(Integer)in.readObject();
        in.close();
       }
       catch (IOException e) {
	    e.printStackTrace();}
        try {
            setTemp(temp);
            setWilg(wilg);
            setCisn(cisn);
        } catch (PropertyVetoException ex) {
            Logger.getLogger(prognoza.class.getName()).log(Level.SEVERE, null, ex);
        }
        jLabel1.setText(pogoda);
        jLabel5.setText(prognoza);
    }//GEN-LAST:event_jButton3ActionPerformed

    /**Metoda spradza poprawność wprowadzonych danych przed użytkownika, prawidłowy proces wywołuje metode sztucznej inteligencji prognozowanie();*/
    private void sprawdzenie(){
        if(jTextField1.getText().equals("") || jTextField2.getText().equals("") || jTextField3.getText().equals(""))
          JOptionPane.showMessageDialog(this, "Wypełnij wszystkie pola!", "Błąd!",0);
        else {
              temp=Integer.parseInt(jTextField1.getText().trim());
              wilg=Integer.parseInt(jTextField2.getText().trim());
              cisn=Integer.parseInt(jTextField3.getText().trim());
              if(temp<-40 || temp>45)
                JOptionPane.showMessageDialog(this, "Wartość temperatury musi być z zakresu od -40 do 45 C", "Błąd!",0);
              else if(wilg<1 || wilg>99)
                JOptionPane.showMessageDialog(this, "Wartość wilgotności musi być z zakresu od 1% do 99%", "Błąd!",0);
              else if(cisn<850 || cisn>1100)
                JOptionPane.showMessageDialog(this, "Wartość ciśnienia musi być z zakresu od 850 do 1100 hPa", "Błąd!",0);
              else
                 prognozowanie();
            }           
    }

    /**Metoda prognozowanie() wykorzystuje algorytmy sztucznej inteligencji do wykonania prognozowania*/
    private void prognozowanie(){
     double term_t=0, term_w=0, wyjsc=0, tmp=0, xx=0, zz=0;
     double temperatura[][]=new double[4][86];
     double wilgotnosc[][]=new double[4][100];
     double wyjscie[][]=new double[10][100];
     double wynik[][]=new double[10][100];
     double agregacja[]= new double[101];
     //term temperatura
     for (int i=0; i<86; i++)
       {
        double x=i;
        temperatura[0][i]=x;

        if (x>=0 && x<=44)
           term_t=(44-x)/44;
        else
           term_t=0;
        temperatura[1][i]=term_t;

        if (x>=42 && x<=47)
           term_t=(x-42)/(5);
        else if (x>47 && x<=52)
           term_t=1;
        else if (x>52 && x<=57)
           term_t=(57-x)/(5);
        else
           term_t=0;
        temperatura[2][i]=term_t;

        if (x>=55 && x<=85)
           term_t=(x-55)/(30);
        else
           term_t=0;
        temperatura[3][i]=term_t;
       }      
     int wej_temp=Integer.parseInt(jTextField1.getText().trim())+40;            
     double tn=temperatura[1][(wej_temp)];
     double ts=temperatura[2][(wej_temp)];
     double td=temperatura[3][(wej_temp)];     
     System.out.println("Dla wartości temperatury: "+wej_temp +"\nRozmywanie dla temperatury:"+"Niska:"+tn+"\nŚrednia:"+ts+"\nWysoka:"+td+"\n");

     //term wilgotnosc
     for (int i=0; i<100; i++)
       {
        double x=i;
        wilgotnosc[0][i]=x;

        if (x>=0 && x<=55)
           term_w=(55-x)/55;
        else
           term_w=0;
        wilgotnosc[1][i]=term_w;

        if (x>=50 && x<=75)
           term_w=(x-50)/(25);
        else if (x>75 && x<=85)
           term_w=(85-x)/(10);
        else
           term_w=0;
        wilgotnosc[2][i]=term_w;

        if (x>=80 && x<=100)
           term_w=(x-80)/(20);
        else
           term_w=0;
        wilgotnosc[3][i]=term_w;
     }
     int wej_wilg=Integer.parseInt(jTextField2.getText().trim());
     double wn=wilgotnosc[1][(wej_wilg)];
     double ws=wilgotnosc[2][(wej_wilg)];
     double ww=wilgotnosc[3][(wej_wilg)];
     System.out.println("Dla wartości wilgotnosc: "+wej_wilg +"\nRozmywanie dla wilgotnosc:"+"Niska:"+wn+"\nŚrednia:"+ws+"\nWysoka:"+ww+"\n");
     
     //term wynikowy
   for (int i=0; i<100; i++)
       {
        double x=i;
        wyjscie[0][i]=x;
        
        if (x>0 && x<=11)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[1][i]=wyjsc;

        if (x>11 && x<=22)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[2][i]=wyjsc;

        if (x>22 && x<=33)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[3][i]=wyjsc;

        if (x>33 && x<=44)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[4][i]=wyjsc;

        if (x>44 && x<=55)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[5][i]=wyjsc;

        if (x>55 && x<=66)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[6][i]=wyjsc;

        if (x>66 && x<=77)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[7][i]=wyjsc;

        if (x>77 && x<=88)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[8][i]=wyjsc;

        if (x>88 && x<=100)
           wyjsc=1;
        else
           wyjsc=0;
        wyjscie[9][i]=wyjsc;
       }

     //wnioskowanie
     double wniosek[]= new double[9];
     wniosek[0]=Math.min(tn,wn); wniosek[1]=Math.min(tn,ws); wniosek[2]=Math.min(tn,ww);
     wniosek[3]=Math.min(ts,wn); wniosek[4]=Math.min(ts,ws); wniosek[5]=Math.min(ts,ww);
     wniosek[6]=Math.min(td,wn); wniosek[7]=Math.min(td,ws); wniosek[8]=Math.min(td,ww);

       for (int i=0; i<100; i++) {
            wynik[0][i]=i;
            if (wniosek[0]>0)
               wynik[1][i]=Math.min(wyjscie[1][i], wniosek[0]);
            if (wniosek[1]>0)
               wynik[2][i]=Math.min(wyjscie[2][i], wniosek[1]);
            if (wniosek[2]>0)
               wynik[3][i]=Math.min(wyjscie[3][i], wniosek[2]);
            if (wniosek[3]>0)
               wynik[4][i]=Math.min(wyjscie[4][i], wniosek[3]);
            if (wniosek[4]>0)
               wynik[5][i]=Math.min(wyjscie[5][i], wniosek[4]);
            if (wniosek[5]>0)
               wynik[6][i]=Math.min(wyjscie[6][i], wniosek[5]);
            if (wniosek[6]>0)
               wynik[7][i]=Math.min(wyjscie[7][i], wniosek[6]);
            if (wniosek[7]>0)
               wynik[8][i]=Math.min(wyjscie[8][i], wniosek[7]);
            if (wniosek[8]>0)
               wynik[9][i]=Math.min(wyjscie[9][i], wniosek[8]);

           //agregacja
           tmp=Math.max(wynik[1][i],wynik[2][i]);
           tmp=Math.max(tmp,wynik[3][i]);
           tmp=Math.max(tmp,wynik[4][i]);
           tmp=Math.max(tmp,wynik[5][i]);
           tmp=Math.max(tmp,wynik[6][i]);
           tmp=Math.max(tmp,wynik[7][i]);
           tmp=Math.max(tmp,wynik[8][i]);
           agregacja[i]=Math.max(tmp,wynik[9][i]);

            //WYOSTRZENIE
            if (agregacja[i]>0) {
                 xx=xx+(agregacja[i]*wynik[0][i]);
                 zz=zz+(agregacja[i]);
                }
     }
     double yy=xx/zz;
     yyy=(int) yy;
     System.out.println(yyy+"\n------------------------");
    }

   /**Metoda wyswietlanie() ustawia komunikaty o prognozie pogody dla użytkownika*/
   private void wyswietlanie(){
     if (yyy>=0 && yyy<11) prognoza="Mroźno oraz pogodnie";
     else if (yyy>=11 && yyy<22) prognoza="Mroźno oraz zachmurzenie";
     else if (yyy>=22 && yyy<33) prognoza="Mroźno oraz śnieżyce";
     else if (yyy>=33 && yyy<44) prognoza="Chłodno i zachmurzenie";
     else if (yyy>=44 && yyy<55) prognoza="Chłodno i miejscowe mgły";
     else if (yyy>=55 && yyy<66) prognoza="Chłodno i deszcze";
     else if (yyy>=66 && yyy<77) prognoza="Ciepło i słonecznie";
     else if (yyy>=77 && yyy<88) prognoza="Ciepło oraz zachmurzenie";
     else if (yyy>=88) prognoza="Ciepło oraz ulewy i burze";
     else prognoza="Brak prognozy, wykonaj pomiar";
     jLabel1.setText(prognoza);            
     java.util.Calendar cal = java.util.Calendar.getInstance();
     java.text.SimpleDateFormat sdf = new SimpleDateFormat("M");
     int miesiac=Integer.parseInt(String.valueOf(sdf.format(cal.getTime())));
     int cisnienie=Integer.parseInt(jTextField3.getText().trim());
     if (miesiac>=4 && miesiac<10) {
         if (cisnienie<1005) pogoda="Prognoza: Pogoda będzie się polepszać.";
         else if(cisnienie>1020) pogoda="Prognoza: Pogoda będzie się pogarszać.";
         else pogoda="Prognoza: Pogoda bez zmian.";
         }
     else {
         if (cisnienie<1005) pogoda="Prognoza: Pogoda będzie się pogarszać.";
         else if(cisnienie>1020) pogoda="Prognoza: Pogoda będzie się polepszać.";
         else pogoda="Prognoza: Pogoda bez zmian.";
     jLabel5.setText(pogoda);

     }
   }

    /** Geter pobiera prognoze
    * @return zwraca wartosć zminnej prognoza */
    public String getPrognoza() {
        return this.prognoza;
    }

    /** Geter pobiera pogode
    * @return zwraca wartosć zminnej pogoda */
    public String getPogoda() {
        return this.pogoda;
    }

    /** Geter pobiera si - wynik działania SI
    * @return zwraca wartosć zminnej si */
    public int getSi() {
        return this.yyy;
    }

    /** Geter pobiera temperature
    * @return zwraca wartosć zminnej temp */
    public int getTemp() {
        return this.temp;
    }

    /** Seter ustawia zmienną temp
    * @param temp - ustawia temperature
    * @throws PropertyVetoException*/
    public void setTemp(int temp) throws PropertyVetoException {
        double old=this.temp;
        if((temp<-41) || temp>46) {
            throw new PropertyVetoException("temp",new PropertyChangeEvent(this, "temp", old, temp));
        }
        jTextField1.setText(String.valueOf(temp));
        this.temp=temp;
        this.vcs.fireVetoableChange("temp", old, temp);
        this.temp=temp;
        this.pcs.firePropertyChange("temp", old, temp);
    }

    /** Geter pobiera wilgotność
    * @return zwraca wartosć zminnej wilg */
    public int getWilg() {
        return this.wilg;
    }

    /** Seter ustawia zmienną wilg
    * @param wilg - ustawia wilgotność
    * @throws PropertyVetoException*/
    public void setWilg(int wilg) throws PropertyVetoException {
        int old=this.wilg;
        if((wilg<1) || wilg>99) {
            throw new PropertyVetoException("wilg",new PropertyChangeEvent(this, "wilg", old, wilg));
        }
        jTextField2.setText(String.valueOf(wilg));
        this.wilg=wilg;
        this.vcs.fireVetoableChange("wilg", old, wilg);
        this.wilg=wilg;
        this.pcs.firePropertyChange("wilg", old, wilg);
    }

    /** Geter pobiera ciśnienie
    * @return zwraca wartosć zminnej cisn */
    public int getCisn() {
        return this.cisn;
    }

    /** Seter ustawia zmienną cisn
    * @param cisn - ustawia ciśnienie
    * @throws PropertyVetoException*/
    public void setCisn(int cisn)throws PropertyVetoException {
        int old=this.cisn;
        if((cisn<850) || cisn>1100) {
            throw new PropertyVetoException("cisn",new PropertyChangeEvent(this, "cisn", old, cisn));
        }
        jTextField3.setText(String.valueOf(cisn));
        this.cisn=cisn;
        this.vcs.fireVetoableChange("cisn", old, cisn);
        this.cisn=cisn;
        this.pcs.firePropertyChange("cisn", old, cisn);
    }


    public void setDzialaj(int z){
        sprawdzenie();
        wyswietlanie();
    }


    /**Słuchacz propertyChange
    * @param listener */
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        this.pcs.addPropertyChangeListener(listener);
    }

    /**Słuchacz removePropertyChange
    * @param listener */
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        this.pcs.addPropertyChangeListener(listener);
    }

    /**Słuchacz VetoableChange
    * @param listener */
    public void addVetoableChangeListener(VetoableChangeListener listener) {
        this.vcs.removeVetoableChangeListener(listener);
    }

    /**Słuchacz removeVetoableChange
    * @param listener */
    public void removeVetoableChangeListener(VetoableChangeListener listener) {
        this.vcs.addVetoableChangeListener(listener);
    }

    private String prognoza;
    private String pogoda;
    private int temp=10;
    private int wilg=10;
    private int cisn=1000;
    private int yyy;
    private final PropertyChangeSupport pcs=new PropertyChangeSupport(this);
    private final VetoableChangeSupport vcs=new VetoableChangeSupport(this);
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    // End of variables declaration//GEN-END:variables
}